package cc.rengu.igas.bomp.common.dao;

import cc.rengu.igas.bomp.common.entity.ProdStageInfo;

import java.util.List;

/**
 * 产品分期表操作接口类
 * Created by 王成 on 2020/3/2
 */
public interface ProdStageInfoMapper {
    /**
     * 登记产品分期信息
     *
     * @param prodStageInfo 产品分期信息
     * @return 0-成功，其它-失败
     * @throws Exception 异常
     */
    int insertProdStageInfo(ProdStageInfo prodStageInfo) throws Exception;

    /**
     * 更新产品分期信息
     *
     * @param prodStageInfo 产品分期信息
     * @return 0-成功，其它-失败
     * @throws Exception 异常
     */
    int updateProdStageInfoById(ProdStageInfo prodStageInfo) throws Exception;

    /**
     * 根据非业务主键查询产品分期信息
     *
     * @param instId 多法人标识
     * @param id     非业务主键
     * @return 产品分期信息
     * @throws Exception 异常
     */
    ProdStageInfo selectProdStageInfoById(String instId, String id) throws Exception;

    /**
     * 根据主键查询产品分期信息
     *
     * @param instId        多法人标识
     * @param prodType      产品类型
     * @param baseProdCode  基础产品代码
     * @param prodStageCode 分期产品代码
     * @param prodStageNum  产品分期期数
     * @return 产品分期信息
     * @throws Exception 异常
     */
    ProdStageInfo selectProdStageInfoByPrimaryKey(String instId, String prodType, String baseProdCode, String prodStageCode, int prodStageNum) throws Exception;

    /**
     * 根据产品类型查询产品分期信息
     *
     * @param instId       多法人标识
     * @param prodType     产品类型
     * @param baseProdCode 基础产品代码
     * @return 产品分期信息
     * @throws Exception 异常
     */
    List<ProdStageInfo> selectProdStageInfoByProdType(String instId, String prodType, String baseProdCode) throws Exception;

    /**
     * 根据分期产品代码查询产品分期信息
     *
     * @param instId        多法人标识
     * @param prodType      产品类型
     * @param prodStageCode 分期产品代码
     * @return 产品分期信息
     * @throws Exception 异常
     */
    List<ProdStageInfo> selectProdStageInfoByProdStageCode(String instId, String prodType, String prodStageCode) throws Exception;


    /**
     * 根据产品类型查询产品分期信息
     *
     * @param instId       多法人标识
     * @param prodType     产品类型
     * @param baseProdCode 基础产品代码
     * @param prodCode     产品代码
     * @return 产品分期信息
     * @throws Exception 异常
     */
    List<ProdStageInfo> selectProdStageInfoByProdCode(String instId, String prodType, String baseProdCode, String prodCode) throws Exception;
}
